
#define _GNU_SOURCE
#include  "daemon_runner.h"
#include  "unistd.h"
#include <fcntl.h>
#include <signal.h>
#include  "daemon_sub_process.h"
#include  "log.h"

static int is_running=1;
static void signal_handler(int sig)
{
    is_running=0;
}


/**
 * @brief 守护进程的运行
 * @return 0 正常退出 -1异常退出
 * 
 * 1 设定： 设定为守护进程  
 * 2 重定向日志  log_info  printf log_error perror
 * 3 注册信号   终止 、 中断
 * 4 初始化子进程
 * 5 持续 监控启动 子进程
 * 6 退出程序
 */
int daemon_runner()
{
    // * 1 设定： 设定为守护进程  
    daemon(1 ,1);// 不改变程序主目录 ， 不关闭标准输入输出

    // * 2 重定向日志  log_info  printf log_error perror
    close(STDIN_FILENO);
    close(STDOUT_FILENO);
    close(STDERR_FILENO);
    open("/dev/null",O_RDWR);
    open("/root/info.log",O_CREAT|O_RDWR,0664);
    open("/root/error.log",O_CREAT|O_RDWR,0664);
    // * 3 注册信号   终止 、 中断
    signal(SIGTERM,signal_handler );
    signal(SIGINT, signal_handler);

    // * 4 初始化子进程 app ota
    sub_process_t *sub_process_app=  daemono_sub_process_init("app");
    sub_process_t *sub_process_ota=  daemono_sub_process_init("ota");

    // * 5 持续 监控启动 子进程

    while(is_running)
    {
        // * 5.1 启动子进程
        daemon_sub_process_check_start(sub_process_app);
        daemon_sub_process_check_start(sub_process_ota);
        sleep(2);
    }

    // * 6 退出程序
    daemon_sub_process_exit(sub_process_app);
    daemon_sub_process_exit(sub_process_ota);

    return 0;
}